using System;
using System.Collections.Generic;
using System.Text;
using AntEater.ComponentModel.BuildElements;

namespace AntEater.Runtime.UI
{

    /// <summary>
    /// 
    /// </summary>
    internal enum AddAction
    {
        /// <summary>
        /// 
        /// </summary>
        AddChild = 0,
        
        /// <summary>
        /// 
        /// </summary>
        AddBeforeReference = 1,
        
        /// <summary>
        /// 
        /// </summary>
        AddAfterReference = 2
    }

    /// <summary>
    /// 
    /// </summary>
    internal class AddBuildElementEventArgs:EventArgs
    {

        /// <summary>
        /// Initializes a new instance of the <see cref="T:AddBuildElementEventArgs"/> class.
        /// </summary>
        /// <param name="action">The action.</param>
        /// <param name="containerBuildElement">The container build element.</param>
        /// <param name="refrenceBuildElement">The refrence build element.</param>
        /// <param name="buildElementType">Type of the build element.</param>
        public AddBuildElementEventArgs(AddAction action, IContainerBuildElement containerBuildElement, IBuildElement refrenceBuildElement, Type buildElementType) {
            this._action = action;
            this._containerBuildElement = containerBuildElement;
            this._refrenceBuildElement = refrenceBuildElement;
            this._buildElementType = buildElementType;
        }

        private AddAction _action;

        /// <summary>
        /// Gets the action.
        /// </summary>
        /// <value>The action.</value>
        public AddAction Action {
            get { return _action; }
        }

        private IContainerBuildElement _containerBuildElement;

        /// <summary>
        /// Gets the container build element.
        /// </summary>
        /// <value>The container build element.</value>
        public IContainerBuildElement ContainerBuildElement {
            get { return _containerBuildElement; }
        }

        private IBuildElement _refrenceBuildElement;

        /// <summary>
        /// Gets the refrence build element.
        /// </summary>
        /// <value>The refrence build element.</value>
        public IBuildElement RefrenceBuildElement {
            get { return _refrenceBuildElement; }
        }

        private Type _buildElementType;

        /// <summary>
        /// Gets the type of the build element.
        /// </summary>
        /// <value>The type of the build element.</value>
        public Type BuildElementType {
            get { return _buildElementType; }
        }
    }
}
